# Лекция: Stream API в Java

Stream API в Java - это набор функций, которые позволяют выполнять операции с последовательностями элементов, такими как коллекции.

## Создание Stream

Stream можно создать из коллекции с помощью метода `stream()`.

```java
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
```

## Операции с Stream

Stream API предоставляет множество операций, таких как `filter`, `map`, `reduce` и другие.

```java
stream.filter(s -> s.startsWith("a")) // фильтрует элементы, начинающиеся с "a"
      .map(String::toUpperCase) // преобразует каждый элемент в верхний регистр
      .forEach(System.out::println); // выводит каждый элемент
```

---

# Практические задания

1. **Создайте Stream из списка чисел и выведите каждое число.** (Сложность: 1/5)
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(System.out::println);
```

2. **Создайте Stream из списка чисел, увеличьте каждое число на 1 и выведите результат.** (Сложность: 2/5)
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().map(n -> n + 1).forEach(System.out::println);
```

3. **Создайте Stream из списка чисел, отфильтруйте только четные числа и выведите результат.** (Сложность: 2/5)
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().filter(n -> n % 2 == 0).forEach(System.out::println);
```

4. **Создайте Stream из списка чисел и вычислите их сумму.** (Сложность: 3/5)
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum);
```

5. **Создайте Stream из списка строк, преобразуйте каждую строку в верхний регистр, отфильтруйте строки, которые начинаются с буквы "A", и выведите результат.** (Сложность: 4/5)
```java
List<String> strings = Arrays.asList("Apple", "Banana", "Cherry", "Apricot", "Avocado");
strings.stream()
       .map(String::toUpperCase)
       .filter(s -> s.startsWith("A"))
       .forEach(System.out::println);
```